home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / BBBBS / BBBBS59.lha / rexx / bbsQUICKOUT.rexx < prev    next >
OS/2 REXX Batch file  |  1993-06-13  |  11KB  |  428 lines

  1. /* $VER: bbsQUICKOUT.rexx 5.9 © 1993 Richard Lee Stockton (13.6.93) 
  2.       copyright 1993 Richard Lee Stockton and Gramma Software
  3.       - FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
  4.  
  5.  Gathers and archives all NEW mail, messages, and file descriptions
  6.       into an emailfile called QUICK_n.lha for later download.
  7. */
  8.  
  9. CR='0D'x
  10. LF='0A'x
  11.  
  12. SIGNAL ON ERROR
  13. SIGNAL ON SYNTAX
  14. SIGNAL ON FAILURE
  15.  
  16. PARSE ARG name level lastbrowse sincedate excludelist 
  17.  
  18. figarg='s:CONFIG.BBS'
  19. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  20. x=OPEN(f,figarg,'R')
  21. IF x=0 THEN
  22.   DO
  23.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  24.     CALL GETOUT(20)
  25.   END
  26.  
  27. lynes.=''
  28. DO i=1 TO 8
  29.   lynes.i=READLN(f)
  30. END
  31. CALL CLOSE(f)
  32.  
  33. compos=POS('/*',lynes.1)
  34. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  35. bbsname=STRIP(lynes.1)
  36. sysop=WORD(lynes.2,1)
  37. sysoplevel=WORD(lynes.5,1)
  38. bbspath=WORD(lynes.6,1)
  39. IF name='' THEN name=sysop
  40.  
  41. /* wait up to 5 minutes for QUICKIN to finish processing */
  42.  
  43. DO i=1 TO 100 WHILE GETCLIP('BBS_'name)='QUICKIN'
  44.   CALL DELAY(150)
  45. END
  46.  
  47. /* Should only be one QUICKOUT process at a time per user */
  48.  
  49. IF GETCLIP('BBS_'name)='QUICK' THEN EXIT
  50. CALL PRAGMA('P',-1)
  51. CALL TIME('R')
  52. CALL SETCLIP('BBS_'name,'QUICK')
  53. CALL MAKEDIR(bbspath'EmailFiles/'name)
  54. IF level='' THEN
  55.   DO
  56.     level=99
  57.     x=OPEN(f,bbspath'Users/'name,'R')
  58.     IF x=0 THEN EXIT 22
  59.     data.=''
  60.     DO i=1
  61.       line=READLN(f)
  62.       IF EOF(f) THEN LEAVE i
  63.       data.i=line
  64.     END
  65.     data.0=i-1
  66.     CALL CLOSE(f)
  67.     city=docity(data.3)
  68.     data.13=DATE('S')'  'TIME('C')
  69.     lastbrowse=WORD(data.16,1)
  70.     sincedate=WORD(data.16,2)
  71.     excludelist=data.21
  72.     noquick=UPPER(data.26)
  73.     IF FIND(noquick,'MESSAGES')=0 THEN
  74.       DO
  75.         CALL SETCLIP('BBS_'name'_22',data.22)
  76.         temp=''
  77.         DO i=1 TO level
  78.           IF WORD(data.22,i)=-1 THEN temp=STRIP(temp -1)
  79.           ELSE temp=STRIP(temp countcheck('LastMessage'i))
  80.         END
  81.         data.22=temp
  82.       END
  83.     IF FIND(noquick,'FILELIST')=0 THEN
  84.       data.16=countcheck('LastFile') DATE('S') TIME()
  85.     x=OPEN(f,bbspath'Users/'name,'W')
  86.     IF x~=0 THEN
  87.       DO i=1 TO data.0
  88.         CALL WRITELN(f,data.i)
  89.       END
  90.     CALL CLOSE(f)
  91.   END
  92. ELSE
  93.   DO
  94.     city=GETCLIP('BBS_city')
  95.     CALL SETCLIP('BBS_city')
  96.     noquick=UPPER(GETCLIP('BBS_'name'_26'))
  97.     CALL SETCLIP('BBS_'name'_26')
  98.   END
  99.  
  100. IF FIND(noquick,'MESSAGES')=0 THEN CALL ArcMsgs.rexx(name)
  101.  
  102. CALL CLOSE(STDOUT)
  103. CALL OPEN(STDOUT,'RAM:QUICKOUT.STDOUT','W')
  104. SAY STRIP(SUBSTR(SOURCELINE(1),3))
  105.  
  106. IF ~EXISTS(bbspath'Users/'name) THEN CALL GETOUT(21)
  107.  
  108. x=OPEN(f,bbspath'Numbers/LastMail','R')
  109. IF x=0 THEN CALL GETOUT(27)
  110. lastm=READLN(f)+1
  111. CALL CLOSE(f)
  112. ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastMail 'lastm
  113.  
  114.  
  115. /* add Messages, Libraries, and Conferences to archive */
  116.  
  117. CALL PRAGMA('D',bbspath'EmailFiles/'name)
  118. nlist=''
  119. IF EXISTS('Conferences') THEN nlist='Conferences'
  120. IF EXISTS('Messages') THEN nlist=STRIP(nlist 'Messages')
  121. IF EXISTS('Libraries') THEN nlist=STRIP(nlist 'Libraries')
  122. CALL strip_ansi(bbspath'EmailFiles/'name nlist)
  123. comm='CD' bbspath'EmailFiles/'name LF 'lha -2amN m'
  124. comm=comm 'QUICK_'lastm'.lha'
  125. SAY comm
  126. SAY nlist
  127. ADDRESS COMMAND comm nlist
  128.  
  129.  
  130. /* gather and archive email and emailfiles */
  131.  
  132. mailfiles=''
  133. email=SHOWDIR(bbspath'Email/'name)
  134. DO i=1 TO WORDS(email)
  135.   x=OPEN(f,bbspath'Email/'name'/'WORD(email,i),'R')
  136.   IF x=0 THEN ITERATE i
  137.   line=READLN(f)
  138.   CALL CLOSE(f)
  139.   file=WORD(line,4)
  140.   IF file='' | ~EXISTS(bbspath'EmailFiles/'name'/'file) THEN ITERATE i
  141.   IF LEFT(UPPER(file),6)='QUICK_' THEN ITERATE i
  142.   IF WORD(STATEF(bbspath'EmailFiles/'name'/'file),2)>0 THEN
  143.     DO
  144.       mailfiles=STRIP(mailfiles 'EmailFiles/'name'/'file)
  145.       xdl=bbspath'EmailFiles/'name'/'file'.xdl'
  146.       IF EXISTS(xdl) THEN
  147.         CALL RENAME(xdl,bbspath'EmailFiles/'name'/QUICK_'lastm'.lha.xdl')
  148.     END
  149. END
  150.  
  151. IF mailfiles~='' THEN
  152.   DO
  153.     comm='CD' bbspath LF 'lha -2axmN m'
  154.     comm=comm 'EmailFiles/'name'/QUICK_'lastm'.lha' mailfiles
  155.     SAY comm
  156.     ADDRESS COMMAND comm
  157.   END
  158. SAY
  159.  
  160. IF email~='' THEN
  161.   DO
  162.     CALL strip_ansi(bbspath'Email/'name email)
  163.     comm='CD' bbspath LF 'lha -2axmN m'
  164.     comm=comm 'EmailFiles/'name'/QUICK_'lastm'.lha Email/'name'/#?'
  165.     SAY comm
  166.     ADDRESS COMMAND comm
  167.   END
  168. SAY
  169.  
  170.  
  171. /* Gather WELCOME(s), UNTIL(s), GOODBYE and all
  172.    new Information files into "Notices" drawer */
  173.  
  174. CALL MAKEDIR(bbspath'EmailFiles/'name'/Notices')
  175. ulist=''
  176. IF FIND(noquick,'HELLO')=0 & EXISTS(bbspath'BBS_TEXT/HELLO') THEN
  177.   ulist='HELLO'
  178. IF FIND(noquick,'WELCOME')=0 & EXISTS(bbspath'BBS_TEXT/WELCOME') THEN
  179.   ulist=STRIP(ulist 'WELCOME')
  180. arg='WELCOME.'RIGHT(DATE('S'),4)
  181. IF EXISTS(bbspath'BBS_TEXT/'arg) THEN ulist=STRIP(ulist arg)
  182. arg='WELCOME.'LEFT(DATE('W'),3)
  183. IF EXISTS(bbspath'BBS_TEXT/'arg) THEN ulist=STRIP(ulist arg)
  184. IF FIND(noquick,'GOODBYE')=0 & EXISTS(bbspath'BBS_TEXT/GOODBYE') THEN
  185.   ulist=STRIP(ulist 'GOODBYE')
  186. untils.=''
  187. IF FileList(bbspath'BBS_TEXT/UNTIL.*',untils)>0 THEN
  188.   DO
  189.     DO ui=1 TO untils.0
  190.       IF RIGHT(untils.ui,8)<DATE('S') THEN ITERATE ui
  191.       ELSE ulist=STRIP(ulist untils.ui)
  192.     END
  193.   END
  194. DROP untils.
  195.  
  196. DO i=1 TO WORDS(ulist)
  197.   comm='CD' bbspath'BBS_TEXT'LF'copy'
  198.   comm=comm WORD(ulist,i) bbspath'EmailFiles/'name'/Notices'
  199.   ADDRESS COMMAND comm
  200. END
  201.  
  202. ulist=''
  203. dm=DATE(,sincedate,'S')
  204. PARSE VAR dm da' 'mo' 'yr .
  205. yr=RIGHT(yr,2)
  206. sincedate=da'-'mo'-'yr
  207. arg=bbspath'Information'
  208. ADDRESS COMMAND 'C:LIST >ram:infolist' arg 'NOHEAD DATES SINCE' sincedate
  209. IF WORD(STATEF('ram:infolist'),2)>3 THEN
  210.   DO
  211.     x=OPEN(f,'ram:infolist','R')
  212.     IF x=0 THEN SAY 'ram:infolist failed to open for reading!'
  213.     ELSE
  214.       DO i=1
  215.         line=READLN(f)
  216.         IF EOF(f) THEN LEAVE i
  217.         IF LEFT(line,1)=':' THEN ITERATE i
  218.         fyle=WORD(line,1)
  219.         IF FIND(noquick,UPPER(fyle))>0 THEN ITERATE i
  220.         ulist=STRIP(ulist fyle)
  221.         readcount=STATEF(bbspath'Information/'fyle)
  222.         readcount=WORD(readcount,8)
  223.         IF ~DATATYPE(readcount,'W') THEN readcount=0
  224.         ADDRESS COMMAND 'C:filenote' bbspath'Information/'fyle readcount+1
  225.       END
  226.     CALL CLOSE(f)
  227.   END
  228.  
  229. DO i=1 TO WORDS(ulist)
  230.   comm='CD' bbspath'Information'LF'copy'
  231.   comm=comm WORD(ulist,i) bbspath'EmailFiles/'name'/Notices'
  232.   ADDRESS COMMAND comm
  233. END
  234.  
  235. IF FIND(noquick,'STATS.BBS')=0 THEN CALL bbsSTATS.rexx(name 0)
  236. IF FIND(noquick,'HOURLY')=0 THEN CALL ShowHourly.rexx(name 99 0)
  237.  
  238. IF level>=sysoplevel THEN
  239.   DO
  240.     ADDRESS COMMAND 'info >'bbspath'EmailFiles/'name'/Notices/Info_Devs'
  241.     ADDRESS COMMAND 'rxset >'bbspath'EmailFiles/'name'/Notices/Info_Clips'
  242.     ADDRESS COMMAND 'avail >'bbspath'EmailFiles/'name'/Notices/Info_Memory'
  243.     temp=bbspath'Lists/NEW_USERS'
  244.     IF EXISTS(temp) THEN
  245.       ADDRESS COMMAND 'copy' temp bbspath'EmailFiles/'name'/Notices'
  246.   END
  247.  
  248. IF WORDS(bbspath'EmailFiles/'name'/Notices')>0 THEN
  249.   DO
  250.     temp=bbspath'EmailFiles/'name'/Notices'
  251.     CALL strip_ansi(temp SHOWDIR(temp))
  252.     comm='CD' bbspath'EmailFiles/'name||LF'lha -2axmN m'
  253.     comm=comm bbspath'EmailFiles/'name'/QUICK_'lastm'.lha Notices/#?'
  254.     SAY comm
  255.     ADDRESS COMMAND comm
  256.   END
  257.  
  258.  
  259. /* archive NEW file descriptions by date */
  260.  
  261. IF FIND(noquick,'FILELIST')=0 THEN
  262.   DO
  263.     x=OPEN(f,bbspath'Lists/Libraries','R')
  264.     IF x=0 THEN
  265.       DO
  266.         SAY 'Libraries list did not open!'
  267.         CALL GETOUT(26)
  268.       END
  269.     libs.=''
  270.     liblist=''
  271.     DO i=1
  272.       line=READLN(f)
  273.       IF EOF(f) | line='END' THEN LEAVE i
  274.       num=WORD(line,1)
  275.       lib=WORD(line,2)
  276.       IF DATATYPE(num,'N') THEN
  277.         DO
  278.           num=num%1
  279.           IF num>0 & num<=level THEN
  280.             DO
  281.               IF FIND(UPPER(excludelist),UPPER(lib))=0 THEN
  282.                 liblist=STRIP(liblist lib)
  283.             END
  284.         END
  285.     END
  286.     CALL CLOSE(f)
  287.     CALL ArcBrowse.rexx(name lastbrowse 'D A' liblist)
  288.   END
  289.  
  290.  
  291. /* add FileList to archive */
  292.  
  293. CALL PRAGMA('D',bbspath'EmailFiles/'name)
  294. IF EXISTS('FileList') THEN
  295.   DO
  296.     comm='CD' bbspath'EmailFiles/'name LF 'lha -2amN m'
  297.     comm=comm 'QUICK_'lastm'.lha'
  298.     SAY comm
  299.     ADDRESS COMMAND comm 'FileList'
  300.   END
  301.  
  302.  
  303. /* Attach an ID file to the archive */
  304.  
  305. x=OPEN(f,bbspath'EmailFiles/'name'/.ID','W')
  306. IF x=0 THEN CALL GETOUT(22)
  307. CALL WRITELN(f,' USER:' name)
  308. CALL WRITELN(f,' CITY:' city)
  309. CALL WRITELN(f,'  BBS:' bbsname)
  310. CALL WRITELN(f,'SYSOP:' sysop)
  311. CALL WRITELN(f,' DATE:' TIME('C') DATE())
  312. CALL WRITELN(f,' KEYS:' lastm level sysoplevel TIME('E'))
  313. CALL WRITELN(f,'')
  314. CALL CLOSE(f)
  315.  
  316. comm='CD' bbspath'EmailFiles/'name LF 'lha -2amN m'
  317. comm=comm 'QUICK_'lastm'.lha .ID'
  318. SAY comm
  319. ADDRESS COMMAND comm
  320.  
  321.  
  322. /* If user is still online, write email and signal */
  323.  
  324. IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
  325.   DO
  326.     x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  327.     IF x=0 THEN CALL GETOUT(26)
  328.     CALL WRITELN(f,' Mail: 'lastm'   FILE: QUICK_'lastm'.lha')
  329.     CALL WRITELN(f,' From: BBBBS')
  330.     CALL WRITELN(f,'   To: 'name)
  331.     CALL WRITELN(f,' Subj: BBS activity since your last call.')
  332.     CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  333.     CALL WRITELN(f,LEFT('=',75,'='))
  334.     CALL WRITELN(f,'Here is the QUICK archive you requested.')
  335.     CALL CLOSE(f)
  336.     oldmess=GETCLIP('BBS_MESSAGE')
  337.     IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
  338.     newmess='Your QUICK archive is waiting in Email.'
  339.     CALL SETCLIP('BBS_MESSAGE',oldmess||newmess)
  340.   END
  341. SAY 'QUICKOUT archive for' name 'sucessfully completed at' TIME('C')
  342. SAY
  343. CALL GETOUT(0)
  344. EXIT
  345.  
  346.  
  347. GETOUT:
  348. ARG err 
  349. IF err>0 THEN SAY 'Error:' err'  'ERRORTEXT(RC) 'RC='RC'  LINE#='SIGL
  350. ERROR:
  351. SYNTAX:
  352. FAILURE:
  353. IF RC>0 THEN SAY 'RC='RC'  SIGL='SIGL
  354. IF GETCLIP('BBS_'name)='QUICK' THEN CALL SETCLIP('BBS_'name)
  355. CALL DELETE(bbspath'EmailFiles/'name'/Notices')
  356. EXIT err
  357.  
  358.  
  359. strip_ansi:
  360. PARSE ARG path tlist 
  361. IF tlist='' THEN RETURN
  362. CALL PRAGMA('D',path)
  363. DO j=1 TO WORDS(tlist)
  364.   data.=''
  365.   changed=0
  366.   x=OPEN(f,WORD(tlist,j),'R')
  367.   IF x=0 THEN
  368.     DO
  369.       SAY WORD(tlist,j) 'failed to open to read!'
  370.       ITERATE j
  371.     END
  372.   DO i=1
  373.     line=READLN(f)
  374.     IF EOF(f) THEN LEAVE i
  375.     n=POS('1B'x,line)
  376.     DO WHILE n>0
  377.       DO k=2
  378.         IF DATATYPE(SUBSTR(line,n+k,1),M) | (n+k+1)>LENGTH(line) THEN
  379.           leave k
  380.       END
  381.       line=DELSTR(line,n,k+1)
  382.       n=POS('1B'x,line)
  383.       changed=1
  384.     END
  385.     data.i=line
  386.   END
  387.   data.0=i-1
  388.   CALL CLOSE(f)
  389.   IF changed=0 THEN ITERATE j
  390.   CALL DELAY(50)
  391.   x=OPEN(f,WORD(tlist,j),'W')
  392.   IF x=0 THEN
  393.     DO
  394.       SAY WORD(tlist,j) 'failed to open to write!'
  395.       ITERATE j
  396.     END
  397.   DO i=1 TO data.0
  398.     CALL WRITELN(f,data.i)
  399.   END
  400.   CALL CLOSE(f)
  401. END
  402. RETURN
  403.  
  404.  
  405. docity:
  406. PARSE ARG citi
  407. citi=TRANSLATE(citi,'          ','+-.,*/()<>')
  408. DO i=WORDS(citi) TO 1 BY -1
  409.   IF DATATYPE(WORD(citi,i),'N') THEN citi=STRIP(DELWORD(citi,i,1))
  410.   IF UPPER(WORD(citi,i))='USA' THEN citi=STRIP(DELWORD(citi,i,1))
  411. END
  412. citi=SPACE(citi,1)
  413. RETURN STRIP(citi)
  414.  
  415.  
  416. countcheck:
  417. PARSE ARG filename
  418. IF filename='' THEN RETURN 0
  419. filename=bbspath'Numbers/'filename
  420. x=OPEN(f,filename,'R')
  421. IF x=0 THEN RETURN 0
  422. cc=READLN(f)
  423. CALL CLOSE(f)
  424. RETURN cc
  425.  
  426.  
  427. /* bbsQUICKOUT.rexx */
  428.